<?php
/**
* Classe de representação de uma camada de negócio da entidade Conta
* A camada de negócio é a parte que engloba as regras e efetua os comandos de execução de um sistema
* @package Sistema
* @subpackage Conta
*/
class NConta extends negocioPadraoArvore{
	/**
	* @gerador variavelPadrao
	* @var integer Identificador
	*/
	public $idConta;
	/**
	* @gerador variavelPadrao
	* @var string Nome
	*/
	public $nome;
	/**
	* @gerador variavelPadrao
	* @var integer Número
	*/
	public $numero;
	/**
	* @gerador variavelPadrao
	* @var integer Esquerda
	*/
	public $esquerda;
	/**
	* @gerador variavelPadrao
	* @var integer Direita
	*/
	public $direita;
	/**
	* @gerador variavelPadrao
	* @var TMoeda Saldo inicial
	*/
	public $saldoInicial;
	/**
	* Retorna o nome da propriedade que contém o valor chave de negócio
	* @gerador metodoPadrao
	* @return string
	*/
	function nomeChave(){ return 'idConta'; }
	/**
	 * Método que define o nome da chave direita da arvore
	 */
	public function  nomeChaveDireita() {
		return 'direita';
	}
	/**
	 * Método que define o nome da chave esquerda da arvore
	 */
	public function  nomeChaveEsquerda() {
		return 'esquerda';
	}
	/**
	 * Método de visualização da coleção aninhada
	 * @param integer $nivel nível de repasse para a mostragem
	 */
	public function mostrarArvore($nivel = 0){
		$res='';
		while($negocio = $this->colecaoFilhos->avancar()){
			$res.= str_repeat("|-----", $nivel).'<a href="?c=CLancamento_verPorConta&pagina=1&idConta='.$negocio->valorChave().'" >'.$negocio->pegarNome().'</a><br/>';
			if($negocio->pegarColecaoFilhos()->possuiItens()){
				$res.= $negocio->mostrarArvore($nivel+1);
			}
		}
		return $res;
	}
	/**
	 * Ler por número da conta
	 * @param string $numero 
	 */
	public function lerPorNumero($numero){
		$this->limparFiltro();
		$this->filtrarNumero(operador::igual($numero));
		$coConta = $this->pesquisar();
		if($coConta->possuiItens()){
			$this->vetorPraNegocio($coConta->pegar()->negocioPraVetor());
		}
	}
	public function lerGrupo(){
		if(!$this->valorChave()) throw new Exception ('A conta não está definida para a leitura do grupo no metodo NConta::lerGrupo');
		$nConta = new NConta($this->pegarConecao());
		$nConta->ler($this->valorChave());
		$nConta->filtrarEsquerda(operador::maiorOuIgual($nConta->pegarEsquerda()));
		$nConta->filtrarDireita(operador::menorOuIgual($nConta->pegarDireita()));
		return $nConta->pesquisar();
	}
}
?>